package com.tbit.manager.api;

import com.tbit.common.entity.view.Result;
import com.tbit.manager.api.dto.UserStatParam;
import com.tbit.manager.api.vo.LineChartData;
import com.tbit.manager.api.vo.PieChartData;
import com.tbit.manager.enums.ApiConstants;
import org.apache.ibatis.annotations.Param;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * 运营分析-用户分析 feign 接口
 *
 * @author <a href="mailto:zhang.zhiliang@tbit.com.cn">Zhang ZhiLiang</a>
 * @version 1.0
 * @see <a href="http://adsl1.tbit.com.cn:21490/pages/viewpage.action?pageId=82182491">订单号规范</a>
 * @since 2025/3/12
 */
@FeignClient(name = ApiConstants.NAME)
public interface UserStatAPI {

    String PREFIX = ApiConstants.PREFIX + "/operationsAnalysis/user";

    /**
     * 概览数据汇总
     *
     * @param param
     * @return
     */
    @GetMapping(value =PREFIX + "/total")
    Result<Map<String,Long>> total(@SpringQueryMap UserStatParam param);

    /**
     * 用户总数
     * @param param 统计参数
     * @return 用户总数 ， 截至时间右区间
     */
    @GetMapping(PREFIX + "/totalUserCount")
    Result<Long> totalUserCount(@SpringQueryMap UserStatParam param);

    /**
     * 实名用户数
     * @param param 统计参数
     * @return 实名用户数 ， 截至时间右区间
     */
    @GetMapping(PREFIX + "/nameAuthUserCount")
    Result<Long> nameAuthUserCount(@SpringQueryMap UserStatParam param);

    /**
     * 时间区间内的新增用户数
     * @param param 统计参数
     * @return 区间 时间端内的新增用户数
     */
    @GetMapping(PREFIX + "/newUserCount")
    Result<Long> newUserCount(@SpringQueryMap UserStatParam param);

    /**
     * 会员用户数
     * @param param 统计参数
     * @return 会员用户数 - 截至时间右区间
     */
    @GetMapping(PREFIX + "/vipUserCount")
    Result<Long> vipUserCount(@SpringQueryMap UserStatParam param);

    /**
     * 新增用户数 - 日增长折线图
     * @param param 统计参数
     * @return 新增用户数 - 日折线图 - 指定区间
     */
    @GetMapping(PREFIX + "/newUserLineChart_Day")
    Result<List<LineChartData>> newUserLineChart_Day(@SpringQueryMap UserStatParam param);

    /**
     * 新增会员数 - 日增长折线图
     * @param param 统计参数
     * @return 新增会员数 - 日折线图 - 指定区间
     */
    @GetMapping(PREFIX + "/newVipLineChart_Day")
    Result<List<LineChartData>> newVipLineChart_Day(@SpringQueryMap UserStatParam param);

    /**
     * 用户年龄段分布 - 饼状图
     * @param param 统计参数
     * @return 用户年龄段分布 - 饼状图 - 指定区间
     */
    @GetMapping(PREFIX + "/ageDistributionPieChart")
    Result<List<PieChartData>> ageDistributionPieChart(@SpringQueryMap UserStatParam param);

    /**
     * 用户性别分布 - 饼状图
     * @param param 统计参数
     * @return 用户性别分布 - 饼状图 - 指定区间
     */
    @GetMapping(PREFIX + "/sexDistributionPieChart")
    Result<List<PieChartData>> sexDistributionPieChart(@SpringQueryMap UserStatParam param);

}
